package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackStatMqVo;
import com.atguigu.tingshu.vo.album.TrackStatVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface TrackInfoService extends IService<TrackInfo> {

    /**
     * 保存声音
     *
     * @param trackInfoVo
     * @param userId
     */
    void saveTrackInfo(TrackInfoVo trackInfoVo, Long userId);

    /**
     * 保存声音统计信息
     *
     * @param trackId  声音id
     * @param statType 0701-播放量 0702-收藏量 0703-点赞量 0704-评论数
     * @param statNum  统计数目
     */
    void saveTrackStat(Long trackId, String statType, Integer statNum);

    /**
     * 修改声音信息
     *
     * @param trackInfo
     */
    void updateTrackInfo(TrackInfo trackInfo);

    /**
     * 删除声音信息
     *
     * @param id
     */
    void removeTrackInfo(Long id);

    /**
     * 详情页面查询专辑包含声音列表-动态展示付费标识
     *
     * @param pageInfo 分页对象
     * @param albumId  专辑id
     * @param userId   用户id
     * @return
     */
    Page<AlbumTrackListVo> getAlbumTrackPage(Page<AlbumTrackListVo> pageInfo, Long albumId, Long userId);

    /**
     * 更新数据库中声音表跟专辑表的统计信息
     *
     * @param trackStatMqVo
     */
    void updateTrackStat(TrackStatMqVo trackStatMqVo);

    /**
     * 获取声音的统计信息
     *
     * @param trackId
     * @return
     */
    TrackStatVo getTrackStatVo(Long trackId);

    /**
     * 根据待购声音作为起始标准查询当前用户未购买的声音列表
     *
     * @param userId
     * @param trackId
     * @param trackCount
     * @return
     */
    List<TrackInfo> findPaidTrackInfoList(Long userId, Long trackId, Integer trackCount);
}
